<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>

<xsl:key name="cat_name" match="category" use="@name"/>

<xsl:template match="/OpenGLAPI">
<xsl:text>
</xsl:text><glxml><xsl:text>
</xsl:text>

<!-- match core api -->
<!--
<xsl:apply-templates select="key('cat_name','1.0')"/>
<xsl:apply-templates select="key('cat_name','1.1')"/>
<xsl:apply-templates select="key('cat_name','1.2')"/>
<xsl:apply-templates select="key('cat_name','1.3')"/>
<xsl:apply-templates select="key('cat_name','1.4')"/>
<xsl:apply-templates select="key('cat_name','1.5')"/>
-->

<!-- match extensions -->
<xsl:apply-templates select="category"/>

</glxml><xsl:text>
</xsl:text>
</xsl:template>


<!-- match core api -->
<xsl:template match="key('cat_name','1.0')">
<gl version="1.0"><xsl:text>
</xsl:text>
<xsl:apply-templates select="type"/>
<xsl:apply-templates select="enum"/>
<xsl:apply-templates select="function"/>
</gl><xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="key('cat_name','1.1')">
<gl version="1.1"><xsl:text>
</xsl:text>
<xsl:apply-templates select="type"/>
<xsl:apply-templates select="enum"/>
<xsl:apply-templates select="function"/>
</gl><xsl:text>

</xsl:text>
</xsl:template>
<xsl:template match="key('cat_name','1.2')">
<gl version="1.2"><xsl:text>
</xsl:text>
<xsl:apply-templates select="type"/>
<xsl:apply-templates select="enum"/>
<xsl:apply-templates select="function"/>
</gl><xsl:text>

</xsl:text>
</xsl:template>
<xsl:template match="key('cat_name','1.3')">
<gl version="1.3"><xsl:text>
</xsl:text>
<xsl:apply-templates select="type"/>
<xsl:apply-templates select="enum"/>
<xsl:apply-templates select="function"/>
</gl><xsl:text>

</xsl:text>
</xsl:template>
<xsl:template match="key('cat_name','1.4')">
<gl version="1.4"><xsl:text>
</xsl:text>
<xsl:apply-templates select="type"/>
<xsl:apply-templates select="enum"/>
<xsl:apply-templates select="function"/>
</gl><xsl:text>

</xsl:text>
</xsl:template>
<xsl:template match="key('cat_name','1.5')">
<gl version="1.5"><xsl:text>
</xsl:text>
<xsl:apply-templates select="type"/>
<xsl:apply-templates select="enum"/>
<xsl:apply-templates select="function"/>
</gl><xsl:text>

</xsl:text>
</xsl:template>

<!-- match extensions -->
<xsl:template match="category">
<xsl:element name="glext">
<xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>
<xsl:if test="@number">
<xsl:attribute name="number"><xsl:value-of select="@number"/></xsl:attribute>
</xsl:if>
<xsl:text>
</xsl:text>

<xsl:apply-templates select="type"/>
<xsl:apply-templates select="enum"/>
<xsl:apply-templates select="function"/>

</xsl:element><xsl:text>

</xsl:text>
</xsl:template>

<!-- templates used in opengl api's -->
<xsl:template match="type">
<type><name>
<xsl:value-of select="@name"/>
</name><size>
<xsl:value-of select="@size"/>
</size></type><xsl:text>
</xsl:text>
</xsl:template>

<xsl:template match="enum">
<token><name>
<xsl:value-of select="@name"/>
</name><value>
<xsl:value-of select="@value"/>
</value></token><xsl:text>
</xsl:text>
</xsl:template>

<xsl:template match="function">
<function><xsl:text>
</xsl:text>

<xsl:text>  </xsl:text><name><xsl:value-of select="@name"/></name><xsl:text>
</xsl:text>

<xsl:if test="return">
<xsl:text>  </xsl:text><return><xsl:apply-templates select="return"/></return><xsl:text>
</xsl:text>
</xsl:if>

<xsl:if test="param">
<xsl:text>  </xsl:text><args><xsl:text>
</xsl:text>
<xsl:apply-templates select="param"/>
<xsl:text>  </xsl:text></args><xsl:text>
</xsl:text>
</xsl:if>

</function><xsl:text>
</xsl:text>
</xsl:template>


<xsl:template match="return">
<xsl:value-of select="@type"/>
</xsl:template>

<xsl:template match="param">
<xsl:text>    </xsl:text><arg><type>
<xsl:value-of select="@type"/>
</type><name>
<xsl:value-of select="@name"/>
</name></arg><xsl:text>
</xsl:text>
</xsl:template>

</xsl:stylesheet>
